06. 向量和 for 循环
向量和 for 循环
很多时候,你都会使用 for 循环来操纵向量。一旦你熟悉了使用带有向量的 for 循环,你就可以实现以下功能
- 用值填充一个向量
- 用向量进行数学运算
下面是一个程序,它可以初始化一个向量,然后使用 for 循环来填充向量的值。然后用另一个 for 循环读出向量值。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<float> example;
for (int i = 0; i < 5; i++) {
example.push_back(i*5.231);
}
for (int i = 0; i < example.size(); i++) {
cout << example[i] << endl;
}
return 0;
}
输出如下所示:
0
5.231
10.462
15.693
20.924
使用 i++ vs. ++i
到目前为止,你已经学习了如何编写下面这样的 C++ for 循环:
for (int i = 0; i < 10; i++) {}
这条语法同 Python 的 for 循环语法十分相似;然而,你也可以这样编写 for 循环:
for (int i = 0; i < 10; ++i) {}
这两者之间有什么区别?为什么它们都可以运行?
事实上,i++ 和 ++i 都会带来同样的结果;这些都是 i=i+1 的缩写形式,它们之间的区别也十分微妙。
int i = 5;
int x = i++; // x = 5, i = 6 (called postfix)
int x = ++i; // x = 6, i = 6 (called prefix)
在两种情况中,i 变量都增加了 1。在后缀式 i++ 的情况中,先计算了int x = i,再出现了 i=i+1。
而在前缀式 ++i 的情况中,i = i + 1 先出现,再执行了 int x = i。
相比 i++,许多代码指南更推荐使用 ++i。在实际操作中,当使用整数变量时,两者的效率相同。
然而,当你编写一个重载 ++ 运算符的 C++ 类时,这两者之间又有一些差别。在 Python 矩阵项目中你见过了操作重载,其中代码重载了数学符号来进行矩阵加法、减法、乘法,等等。
重载后缀式运算符时,C++ 需要记录两个值。在例子中,记录的值是 5 和 6。而对于前缀式运算符而言,C++ 只需要记录一个值:6。因此,当重载 ++ 运算符时,使用前缀式运算符比后缀式更加高效。
重载是 C++ 的一个高阶主题,并不在本课程的讨论范围之内。如果你想了解更多相关信息,下面有一些资源:
练习向量方法和 For 循环
Start Quiz:
//TODO: include the iostream and vector libraries
//TODO: Use the standard namespace
int main() {
// Part 1: declare and define a vector with values
// {5.0, 5.0, 5.0} and print
// the vector to the terminal using cout
// Hint: the syntax vector<datatype> varname(length, value) might help
// Part 2: Use push back to add the values 3.0, 2.5, 1.4
// to the back of the vector
// Part 3: Print out the vector again using cout
// Part 4: Use the vector assign method to override the current vector.
// The overriden vector should have 3 elements with
// the values {5.0, 5.0, 5.0}
// Part 5: Print out the vector
return 0;
}
#include <iostream>
#include <vector>
using namespace std;
int main() {
// Part 1: declare and define a vector {5.0, 5.0, 5.0} and print it out
vector<float> vectorvar(3, 5.0);
for (int i = 0; i < vectorvar.size(); i++) {
cout << vectorvar[i] << " ";
}
cout << endl;
// Part 2: Use push back to add the values 3.0, 2.5, 1.4 to the back of the vector
vectorvar.push_back(3.0);
vectorvar.push_back(2.5);
vectorvar.push_back(1.4);
// Part 3: Print out the vector
for (int i = 0; i < vectorvar.size(); i++) {
cout << vectorvar[i] << " ";
}
cout << "\n";
// Part 4: Use the assign method so that the current vector has values
// {5.0, 5.0, 5.0}
vectorvar.assign(3, 5.0);
// Part 5: Print out the vector
for (int i = 0; i < vectorvar.size(); i++) {
cout << vectorvar[i] << " ";
}
cout << "\n";
return 0;
}